请c++大虾指教``怎样改下面的程序,使它能看见结果`本人用的软件是dev c++.

来源:百度知道 编辑:UC知道 时间:2024/05/28 02:42:27
#include <iostream>
#include <string>
using namespace std;
template<class Type>Type min(Type a,Type b){return a>b?b:a;}
int a[]={1,2,34,5,5};
short ss=99;
int min(int a1,int a2){
int e= min(a1,a2);
return e;
}
int call(){return min(a[2],ss);}
int main(){
int q=call();
int d=min(a[0],ss);
cout<<d<<endl<<q<<endl;
getchar();
return 0;
}
你是说普通函数把模板函数隐藏了?我原意是想重载min函数,因为min(a[2],ss)它通过编译器得知普通函数int min是最佳可行函数,所以先调用它,那么short隐式转换为int,再调用int min结构体定义的min(a1,a2)也就是调用模板函数....原程序编译成功,也没发出警告..就是看不见结果`.我不肯定是否这个原因(普通函数真的把模板函数隐藏了).....

现在可以了``只是min函数和原有库函数冲突..不用修改short!
普通函数没把模板函数隐藏.谢谢你

int call(){return min(a[2],ss);}
这句就错了
你的模版只能带a,b同一类型的
int min函数也是
但是你这里a[2]是整形,ss是短整形
没有一个函数可以调用
自然就错了
而且min函数和原有库函数冲突,必须改名

可以改成如下
template<class Type>Type min1(Type a,Type b){return a>b?b:a;}
int a[]={1,2,34,5,5};
int ss=99;//改为整形
int min1(int a1,int a2){
int e= min1<int>(a1,a2); //必须调用模版,否则一直调用自己,导致死循环
return e;
}
int call(){return min1(a[2],ss);}
int main(){
int q=call();
int d=min1(a[0],ss);
cout<<d<<endl<<q<<endl;
getchar();
return 0;
}